package demo1;

import java.util.List;

/**
 * 客户端：测试装饰器组合功能
 */
public class WordReaderClient {
    public static void main(String[] args) {
        // 1. 组合装饰器链：基础读取 → 去空格 → 空值过滤 → 转小写 → 去重 → 过滤长度≥3的单词
        WordReader wordReader = new FilterLengthDecorator(
                new DistinctDecorator(
                        new LowerCaseDecorator(
                                new FilterEmptyDecorator(
                                        new TrimDecorator(
                                                new RawWordReader() // 基础组件（内存数据源）
                                        )
                                )
                        )
                ),
                3 // 过滤长度小于3的单词
        );

        // 2. 执行读取（装饰器链自动顺序执行）
        System.out.println("=== 开始读取并处理单词表 ===");
        List<String> result = wordReader.readWords();

        // 3. 输出最终结果
        System.out.println("=== 最终处理结果 ===");
        System.out.println("最终单词数：" + result.size());
        System.out.println("最终单词列表：" + result);

        // 4. 测试自定义原始数据（可选）
        System.out.println("\n=== 测试自定义原始数据 ===");
        List<String> customRaw = List.of("  Java ", "PYTHON", "  java ", "C++", "  ");
        WordReader customReader = new LowerCaseDecorator(new TrimDecorator(new RawWordReader(customRaw)));
        List<String> customResult = customReader.readWords();
        System.out.println("自定义数据处理结果：" + customResult);
    }
}
